<!DOCTYPE html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8" />
    <!-- 公共头部 -->
    {{include './comm/link.html'}}
    <link
      rel="stylesheet"
      href="//cdn.bootcss.com/highlight.js/9.2.0/styles/github.min.css"
    />
    <script src="//cdn.bootcss.com/highlight.js/9.2.0/highlight.min.js"></script>
    <title>article</title>
   
  </head>

  <body>
    <div class="lark">
      <!-- header -->
      <div class="aheader doc-head">
        <div class="doc-head-inner">
          <div class="header-crumb">
            <div class="lark-breadcrumb">
              <div class="ant-breadcrumb">
                <span>
                  <a class="ant-breadcrumb-link" href="/nav9n2">
                    <span class="">JavaScript核心原理解析</span></a
                  ><span class="ant-breadcrumb-separator"
                    ><span class="oi oi-chevron-right"> </span></span></span
                ><span
                  ><a class="ant-breadcrumb-link" href="/nav9n2/lkb80y"
                    ><span class=""
                      ><span class="lark-book-title"
                        ><span class="book-name"
                          ><span class="book-name-text"
                            >JavaScript核心原理解析</span
                          ></span
                        ></span
                      ></span
                    ></a
                  ><span class="ant-breadcrumb-separator"
                    ><span class="oi oi-chevron-right"> </span></span></span
                ><span
                  ><a class="header-crumb-doc" href="/nav9n2/lkb80y/ubloq1"
                    ><span class="lark-breadcrumb-current"
                      ><span class="doc-title"
                        >JavaScript 是如何构建起来的？</span
                      ></span
                    ></a
                  ><span class="ant-breadcrumb-separator"
                    ><span class="oi oi-chevron-right"></span></span
                ></span>
              </div>
            </div>
          </div>
          <div class="header-action">
            <!-- <button type="button" class="btn btn-sm">登录更多</button> -->
            <!-- <span class="oi oi-flip-horizontal"></span> -->
            ...
          </div>
        </div>
      </div>
      <!-- header end -->
      <!-- main-wrapper -->
      <div class="main-wrapper">
        <!-- doc wrapper -->
        <div class="doc-wrapper">
          <!-- doc -main -->
          <div class="doc-main pos-rel">
            <div class="article">
              <article class="article-content lake-engine">
                <div class="cheader">
                  <div class="title">
                    <h1 id="article-title" class="articleTitle">
                      JavaScript 是如何构建起来的？
                    </h1>
                  </div>
                </div>

                <div class="content doc-content">
                  <h2 id="5bc9a6fe">
                    delete 在删除什么？
                  </h2>
                  <p><br /></p>
                  <p>
                    <code>delete UnaryExpression</code>
                    这个语法不是要<strong>删除某个东西</strong>，而<strong>删除一个表达式的结果</strong>。
                  </p>
                  <p><br /></p>
                  <p>
                    delete 0，不是删除 0
                    这个值(Value)类型数据，而是删除一个表达式运算的结果值(Result)。
                  </p>
                  <p><br /></p>
                  <p>在删除操作之前，JS 要检测这个 Result 的类型：</p>
                  <p>若是值/非引用类型，则返回 true。</p>
                  <p>若是一个引用，则对该引用进行分析，决定如何操作。</p>
                  <p><br /></p>
                  <p>delete 删除值数据时，返回 true，表明该过程中没有异常。</p>
                  <p><br /></p>
                  <p>delete 0 的本质是删除一个表达式的值。</p>
                  <p>
                    delete x (等价于 obj.x)
                    删除的也是一个表达式的值，但这个值是一个引用。
                  </p>
                  <p>delete 只能删除一种引用，即对象的成员。</p>
                  <p><br /></p>
                  <h3 id="1bd78e63">
                    <a class="lake-anchor" style="top: 9px;"
                      ><span
                        class="lake-anchor-button lake-icon lake-icon-h3"
                      ></span></a
                    >x = x 是什么意思？
                  </h3>
                  <p><br /></p>
                  <p>
                    <code>x = x</code> 会被翻译为
                    <code>x = GetValue(x)</code> 来执行。
                  </p>
                  <p>
                    所有赋值操作的含义，是将右边的“值”，赋给左边用于包含该值的“引用”。
                  </p>
                  <p><br /></p>
                  <h3 id="3e93db56">
                    <a class="lake-anchor" style="top: 9px;"
                      ><span
                        class="lake-anchor-button lake-icon lake-icon-h3"
                      ></span></a
                    >如何区别两个 x
                  </h3>
                  <p><br /></p>
                  <p>如果 x 放在左边作为 lhs(left hand side)，那么他是引用；</p>
                  <p>如果放在右边作为 rhs，那么就是值。</p>
                  <p><br /></p>
                  <p>
                    所以，<code>x = x</code> 是<strong>把值 x 赋给引用 x</strong
                    >。<code>delete x</code
                    >，是在删除一个表达式的、引用类型的结果，而不是在删除 x
                    表达式或表达式的值。
                  </p>
                  <p><br /></p>
                  <p>
                    当 x 是全局对象 global 的属性时，delete x 删除的是 global.x
                    这个引用。
                  </p>
                  <p>
                    当 x 不是全局对象 global 的属性时，就从当前环境找到一个名为
                    x 的引用。
                  </p>

                  <br />

                  <pre>
                      <code class="javascript">
var a = 100;
b = 200;

delete a; // false
delete b; // true

eval("var c = 300");
Object.getOwnPropertyDescriptor(global, "c").configurable; // true
delete c; // true
                    </code></pre>

                  <br />
                </div>
              </article>
            </div>
            <!-- tocWrapper -->
            <div class="tocWrapper">
              <div class="toc tocWithHeader">
                <div style="user-select: none;">
                  <div class="wrap" style="height: 551px;">
                    <ul class="directory">
                      <li class="directory-item">
                        <a
                          class="directory-item-link directory-item-link-1"
                          href="#5bc9a6fe"
                          title="delete 在删除什么？"
                          ><span>delete 在删除什么？</span></a
                        >
                      </li>
                      <li class="directory-item">
                        <a
                          class="directory-item-link directory-item-link-2"
                          href="#1bd78e63"
                          title="x = x 是什么意思？"
                          ><span>x = x 是什么意思？</span></a
                        >
                      </li>
                      <li class="directory-item">
                        <a
                          class="directory-item-link directory-item-link-2"
                          href="#3e93db56"
                          title="如何区别两个 x"
                          ><span>如何区别两个 x</span></a
                        >
                      </li>
                      <li class="directory-item directory-item-active">
                        <a
                          class="directory-item-link directory-item-link-2"
                          href="#3cd1dce8"
                          title="思考题"
                          ><span>思考题</span></a
                        >
                      </li>
                      <li class="directory-item">
                        <a
                          class="directory-item-link directory-item-link-1"
                          href="#d256d544"
                          title="var x = y = 100"
                          ><span>var x = y = 100</span></a
                        >
                      </li>
                      <li class="directory-item">
                        <a
                          class="directory-item-link directory-item-link-2"
                          href="#5a298d3a"
                          title="JS 中的六条声明语句"
                          ><span>JS 中的六条声明语句</span></a
                        >
                      </li>
                      <li class="directory-item">
                        <a
                          class="directory-item-link directory-item-link-2"
                          href="#08c05bde"
                          title="var 与 let"
                          ><span>var 与 let</span></a
                        >
                      </li>
                      <li class="directory-item">
                        <a
                          class="directory-item-link directory-item-link-2"
                          href="#79bb79dc"
                          title="JS 中的赋值操作表达式"
                          ><span>JS 中的赋值操作表达式</span></a
                        >
                      </li>
                      <li class="directory-item">
                        <a
                          class="directory-item-link directory-item-link-2"
                          href="#438b7039"
                          title="变量泄漏"
                          ><span>变量泄漏</span></a
                        >
                      </li>
                      <li class="directory-item">
                        <a
                          class="directory-item-link directory-item-link-1"
                          href="#e6b63797"
                          title="a.x = a = {n: 2}"
                          ><span>a.x = a = {n: 2}</span></a
                        >
                      </li>
                      <li class="directory-item">
                        <a
                          class="directory-item-link directory-item-link-2"
                          href="#55c1b646"
                          title="a.x 为什么是 undefined?"
                          ><span>a.x 为什么是 undefined?</span></a
                        >
                      </li>
                      <li class="directory-item">
                        <a
                          class="directory-item-link directory-item-link-2"
                          href="#3deaa6b3"
                          title="为什么不能写成 var a.x?"
                          ><span>为什么不能写成 var a.x?</span></a
                        >
                      </li>
                    </ul>
                  </div>
                </div>
              </div>
            </div>
            <!-- tocWrapper end -->
          </div>
          <!-- doc -main  end -->
          <!-- shareLink -->
          <div class="shareLink doc-width  mx-auto">
            shareLink
          </div>
          <!-- shareLink end -->
          <!-- comment  -->
          <div class="comment doc-width mx-auto">
            comment
          </div>
          <!-- comment end -->
        </div>
        <!-- doc wrapper end-->
      </div>
 
      <!-- main-wrapper end -->
    </div>

    {{include './comm/copy.html'}} {{include './comm/footer.html'}}

    <script>
      $("pre code").each(function() {
        $(this).html(
          "<ul><li>" +
            $(this)
              .html()
              .replace(/\n/g, "\n</li><li>") +
            "\n</li></ul>"
        );
      });
      hljs.initHighlightingOnLoad();
    </script>
  </body>
</html>
